/*
 * Copyright 2012 Benoît Combe <benoit.combe@gmail.com>.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package fr.ipst.spot.entites;

import fr.ipst.spot.entites.utils.Departement;
import fr.ipst.spot.entites.utils.Pays;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;

/**
 *
 * @author Benoît Combe <benoit.combe@gmail.com>
 */
@Entity
@Table(name = "Auditeur", catalog = "SPOT", schema = "", uniqueConstraints = {
    @UniqueConstraint(columnNames = {"numeroSecuSoc"}),
    @UniqueConstraint(columnNames = {"mail"}),
    @UniqueConstraint(columnNames = {"ine"}),
    @UniqueConstraint(columnNames = {"numeroAuditeur"})})
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Auditeur.findAll", query = "SELECT a FROM Auditeur a"),
    @NamedQuery(name = "Auditeur.findByIdAuditeur", query = "SELECT a FROM Auditeur a WHERE a.idAuditeur = :idAuditeur"),
    @NamedQuery(name = "Auditeur.findByNom", query = "SELECT a FROM Auditeur a WHERE a.nom = :nom"),
    @NamedQuery(name = "Auditeur.findByPrenom", query = "SELECT a FROM Auditeur a WHERE a.prenom = :prenom"),
    @NamedQuery(name = "Auditeur.findByMail", query = "SELECT a FROM Auditeur a WHERE a.mail = :mail"),
    @NamedQuery(name = "Auditeur.findByInscrit", query = "SELECT a FROM Auditeur a WHERE a.inscrit = :inscrit"),
    @NamedQuery(name = "Auditeur.findByDateNaissance", query = "SELECT a FROM Auditeur a WHERE a.dateNaissance = :dateNaissance"),
    @NamedQuery(name = "Auditeur.findByTelephone", query = "SELECT a FROM Auditeur a WHERE a.telephone = :telephone"),
    @NamedQuery(name = "Auditeur.findByMobile", query = "SELECT a FROM Auditeur a WHERE a.mobile = :mobile"),
    @NamedQuery(name = "Auditeur.findByNumeroSecuSoc", query = "SELECT a FROM Auditeur a WHERE a.numeroSecuSoc = :numeroSecuSoc"),
    @NamedQuery(name = "Auditeur.findByIne", query = "SELECT a FROM Auditeur a WHERE a.ine = :ine"),
    @NamedQuery(name = "Auditeur.findByNumeroAuditeur", query = "SELECT a FROM Auditeur a WHERE a.numeroAuditeur = :numeroAuditeur"),
    @NamedQuery(name = "Auditeur.findByAdresse", query = "SELECT a FROM Auditeur a WHERE a.adresse = :adresse"),
    @NamedQuery(name = "Auditeur.findByCodePostal", query = "SELECT a FROM Auditeur a WHERE a.codePostal = :codePostal"),
    @NamedQuery(name = "Auditeur.findByVille", query = "SELECT a FROM Auditeur a WHERE a.ville = :ville"),
    @NamedQuery(name = "Auditeur.findByVilleNaissance", query = "SELECT a FROM Auditeur a WHERE a.villeNaissance = :villeNaissance"),
    @NamedQuery(name = "Auditeur.findByDeptNaissance", query = "SELECT a FROM Auditeur a WHERE a.deptNaissance = :deptNaissance"),
    @NamedQuery(name = "Auditeur.findByPays", query = "SELECT a FROM Auditeur a WHERE a.pays = :pays")})
public class Auditeur extends AbstractSpotEntite implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @NotNull
    @Column(name = "idAuditeur", nullable = false)
    private Integer idAuditeur;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 45)
    @Column(name = "nom", nullable = false, length = 45)
    private String nom;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 45)
    @Column(name = "prenom", nullable = false, length = 45)
    private String prenom;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 255)
    @Column(name = "mail", nullable = false, length = 255)
    private String mail;
    @Basic(optional = false)
    @NotNull
    @Column(name = "inscrit", nullable = false)
    private boolean inscrit;
    @Basic(optional = false)
    @NotNull
    @Column(name = "dateNaissance", nullable = false)
    @Temporal(TemporalType.DATE)
    private Date dateNaissance;
    @Size(max = 13)
    @Column(name = "telephone", length = 13)
    private String telephone;
    @Size(max = 13)
    @Column(name = "mobile", length = 13)
    private String mobile;
    @Size(max = 16)
    @Column(name = "numeroSecuSoc", length = 16)
    private String numeroSecuSoc;
    @Size(max = 45)
    @Column(name = "ine", length = 45)
    private String ine;
    @Size(max = 45)
    @Column(name = "numeroAuditeur", length = 45)
    private String numeroAuditeur;
    @Size(max = 1024)
    @Column(name = "adresse", length = 1024)
    private String adresse;
    @Column(name = "codePostal")
    private Integer codePostal;
    @Size(max = 255)
    @Column(name = "ville", length = 255)
    private String ville;
    @Size(max = 255)
    @Column(name = "villeNaissance", length = 255)
    private String villeNaissance;
    @Column(name = "deptNaissance")
    @Enumerated(EnumType.ORDINAL)
    private Departement deptNaissance;
    @Column(name = "pays")
    @Enumerated(EnumType.ORDINAL)
    private Pays pays;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "auditeur", fetch = FetchType.LAZY)
    private List<Evenement> evenementList;

    /**
     *
     */
    public Auditeur() {
    }

    /**
     *
     * @param idAuditeur
     */
    public Auditeur(Integer idAuditeur) {
        this.idAuditeur = idAuditeur;
    }

    /**
     *
     * @param idAuditeur
     * @param nom
     * @param prenom
     * @param mail
     * @param inscrit
     * @param dateNaissance
     */
    public Auditeur(Integer idAuditeur, String nom, String prenom, String mail, boolean inscrit, Date dateNaissance) {
        this.idAuditeur = idAuditeur;
        this.nom = nom;
        this.prenom = prenom;
        this.mail = mail;
        this.inscrit = inscrit;
        this.dateNaissance = dateNaissance;
    }

    /**
     *
     * @return
     */
    public Integer getIdAuditeur() {
        return idAuditeur;
    }

    /**
     *
     * @param idAuditeur
     */
    public void setIdAuditeur(Integer idAuditeur) {
        this.idAuditeur = idAuditeur;
    }

    /**
     *
     * @return
     */
    public String getNom() {
        return nom;
    }

    /**
     *
     * @param nom
     */
    public void setNom(String nom) {
        this.nom = nom;
    }

    /**
     *
     * @return
     */
    public String getPrenom() {
        return prenom;
    }

    /**
     *
     * @param prenom
     */
    public void setPrenom(String prenom) {
        this.prenom = prenom;
    }

    /**
     *
     * @return
     */
    public String getMail() {
        return mail;
    }

    /**
     *
     * @param mail
     */
    public void setMail(String mail) {
        this.mail = mail;
    }

    /**
     *
     * @return
     */
    public boolean getInscrit() {
        return inscrit;
    }

    /**
     *
     * @param inscrit
     */
    public void setInscrit(boolean inscrit) {
        this.inscrit = inscrit;
    }

    /**
     *
     * @return
     */
    public Date getDateNaissance() {
        return dateNaissance;
    }

    /**
     *
     * @param dateNaissance
     */
    public void setDateNaissance(Date dateNaissance) {
        this.dateNaissance = dateNaissance;
    }

    /**
     *
     * @return
     */
    public String getTelephone() {
        return telephone;
    }

    /**
     *
     * @param telephone
     */
    public void setTelephone(String telephone) {
        this.telephone = telephone;
    }

    /**
     *
     * @return
     */
    public String getMobile() {
        return mobile;
    }

    /**
     *
     * @param mobile
     */
    public void setMobile(String mobile) {
        this.mobile = mobile;
    }

    /**
     *
     * @return
     */
    public String getNumeroSecuSoc() {
        return numeroSecuSoc;
    }

    /**
     *
     * @param numeroSecuSoc
     */
    public void setNumeroSecuSoc(String numeroSecuSoc) {
        this.numeroSecuSoc = numeroSecuSoc;
    }

    /**
     *
     * @return
     */
    public String getIne() {
        return ine;
    }

    /**
     *
     * @param ine
     */
    public void setIne(String ine) {
        this.ine = ine;
    }

    /**
     *
     * @return
     */
    public String getNumeroAuditeur() {
        return numeroAuditeur;
    }

    /**
     *
     * @param numeroAuditeur
     */
    public void setNumeroAuditeur(String numeroAuditeur) {
        this.numeroAuditeur = numeroAuditeur;
    }

    /**
     *
     * @return
     */
    public String getAdresse() {
        return adresse;
    }

    /**
     *
     * @param adresse
     */
    public void setAdresse(String adresse) {
        this.adresse = adresse;
    }

    /**
     *
     * @return
     */
    public Integer getCodePostal() {
        return codePostal;
    }

    /**
     *
     * @param codePostal
     */
    public void setCodePostal(Integer codePostal) {
        this.codePostal = codePostal;
    }

    /**
     *
     * @return
     */
    public String getVille() {
        return ville;
    }

    /**
     *
     * @param ville
     */
    public void setVille(String ville) {
        this.ville = ville;
    }

    /**
     *
     * @return
     */
    public String getVilleNaissance() {
        return villeNaissance;
    }

    /**
     *
     * @param villeNaissance
     */
    public void setVilleNaissance(String villeNaissance) {
        this.villeNaissance = villeNaissance;
    }

    /**
     *
     * @return
     */
    public Departement getDeptNaissance() {
        return deptNaissance;
    }

    /**
     *
     * @param deptNaissance
     */
    public void setDeptNaissance(Departement deptNaissance) {
        this.deptNaissance = deptNaissance;
    }

    /**
     *
     * @return
     */
    public Pays getPays() {
        return pays;
    }

    /**
     *
     * @param pays
     */
    public void setPays(Pays pays) {
        this.pays = pays;
    }

    /**
     *
     * @return
     */
    @XmlTransient
    public List<Evenement> getEvenementList() {
        return evenementList;
    }

    /**
     *
     * @param evenementList
     */
    public void setEvenementList(List<Evenement> evenementList) {
        this.evenementList = evenementList;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idAuditeur != null ? idAuditeur.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Auditeur)) {
            return false;
        }
        Auditeur other = (Auditeur) object;
        if ((this.idAuditeur == null && other.idAuditeur != null) || (this.idAuditeur != null && !this.idAuditeur.equals(other.idAuditeur))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "fr.ipst.spot.entites.Auditeur[ idAuditeur=" + idAuditeur + " ]";
    }

    /**
     *
     * @return
     */
    @Override
    public Integer getId() {
        return this.idAuditeur;
    }
}
